package main

import "fmt"

// 管道
func main() {
	//1、创建管道
	ch := make(chan int, 3)
	//2、给管道里面存储数据
	ch <- 100
	ch <- 22
	ch <- 23
	//ch <- 88
	//获取管道里面 的内容
	a := <-ch
	fmt.Println(a)
	<-ch
	c := <-ch
	fmt.Println(c)
	ch <- 88
	//ch <- 22

	//4、管道的容量和长度
	fmt.Printf("ch的值为:%v 容量为:%v 长度为:%v\n", ch, cap(ch), len(ch))
	d := <-ch
	fmt.Println(d)
	//3、管道的类型 (引用数据类型)

	//5、管道阻塞: 存储时超出管道容量 会出现阻塞。在没有使用协程的情况下，如果我们管道数据全部取出，再取就会报告 deadlock

	//循环遍历管道
	ch1 := make(chan int, 10)
	for i := 1; i <= 10; i++ {
		ch1 <- i
	}
	close(ch1)

	for val := range ch1 { // 如果不关闭管道 循环会报错
		fmt.Println(val)
	}

	// for 循环 循环管道可以不关闭
	ch2 := make(chan int, 10)
	for i := 1; i <= 10; i++ {
		ch2 <- i
	}

	for i := 1; i <= 10; i++ {
		fmt.Println(<-ch2)
	}
}
